package DesignPatterns.singleton;

/**
 * 这是java自身就支持的特性，java里的枚举类就是单例的，所以使用枚举来实现单例简单也简洁，不过把正常类写成枚举总感觉怪怪的。此外枚举单例还解决了上面这些单例解决不了的问题
 * 解决反序列化破坏单例：枚举类天生支持序列化，在序列化的时候，只会序列化枚举的name，而不会序列化枚举的属性，反序列化时也是根据name找到实例返回，并不会创建新对象，所以序列化破坏不了这个单例。
 * 解决反射场景破坏单例：反射还是利用原类的构造方法进行创建，而枚举类的实际上集成了Enum这个类，他没有空参构造，且有参构造不支持枚举类的创建，所以不存在反射的问题
 * 解决克隆破坏单例：枚举类无法被克隆，所以不会被创建，他的clone方法是final的无法重写，所以克隆也破坏不了单例
 */
public enum Single8 {
    INSTANCE("zhangsan");
    private String name;

    private  Single8(String name) {
        this.name = name;
    }

    public static Single8 getInstance() {
        return INSTANCE;
    }

}
